from django.db import models
from utils.base_models import BaseModel

# Create your models here.

# 用户表
"""
各个字段类型的介绍
AutoField  一个id自增的字段，但创建表过程Django会自动添加一个自增的主键字段
BinaryField 一个保存二进制源数据的字段
BooleanField 一个布尔值的字段，应该指明默认值，管理后台中默认呈现为CheckBox形式
NullBooleanField 可以为None值的布尔值字段
CharField  字符串值字段，必须指明参数max_length值，管理后台中默认呈现为TextInput形式
TextField  文本域字段，对于大量文本应该使用TextField。管理后台中默认呈现为Textarea形式
DateField  日期字段，代表Python中datetime.date的实例。管理后台默认呈现TextInput形式
DateTimeField  时间字段，代表Python中datetime.datetime实例。管理后台默认呈现TextInput
EmailField  邮件字段，是CharField的实现，用于检查该字段值是否符合邮件地址格式
FileField  上传文件字段，管理后台默认呈现ClearableFileInput形式
ImageField  图片上传字段，是FileField的实现。管理后台默认呈现ClearableFileInput形式
IntegerField  整数值字段，在管理后台默认呈现NumberInput或者TextInput形式

FloatField  浮点数值字段，在管理后台默认呈现NumberInput或者TextInput形式
SlugField  只保存字母数字和下划线和连接符，用于生成URL的短标签
UUIDField  保存一般统一标识符的字段，代表Python中UUID的实例，建议提供默认值default
ForeignKey  外键关系字段，需提供外键的模型参数，和on_delete参数(指定当该模型实例删除的时候，是否删除关联模型)，
如果要外键的模型出现在当前模型的后面，需要在第一个参数中使用单引号'Manufacture'
ManyToManyField  多对多关系字段，与ForeignKey类似
OneToOneField  一对一关系字段，常用于扩展其他模型
"""


class User(BaseModel):
    # 定义id字段，IntegerField 为整数类型，primary_key 为主键，必须依赖
    # id = models.IntegerField(primary_key=True)
    id = models.AutoField(primary_key=True)
    # verbose_name为字段的别名，默认第一位；max_length 最大长度；null 数据库层面：设True可为空；
    # blank django界面上的：设True可为空；unique 必须唯一，用户名不能冲突
    username = models.CharField(
        '用户名', max_length=30, null=False, blank=False, unique=True)
    password = models.CharField('密码', max_length=30)
    email = models.EmailField('邮箱', null=True, blank=True, unique=True)

    class Meta:
        db_table = "user"  
        verbose_name = "用户信息" 
        verbose_name_plural = '用户信息'
    
    # 当想要输出这个实例对象的时候，输出的是 object，想要输出的是用户名，如下方这样编写，默认调用显示username
    # 因此这个方法几乎必须写，否则返回object，比如这里的不写就显示 User Object
    def __str__(self):
        return self.username
    